#ifndef _PERIPHERAL_MC_H_
#define _PERIPHERAL_MC_H_

#include "py32m0xx_hal.h"

#define OPA_LDO_ENABLE()			HAL_GPIO_WritePin(LDO_OP_SWITCH_PORT, LDO_OP_SWITCH_PIN, GPIO_PIN_SET)
#define OPA_LDO_DISABLE()			HAL_GPIO_WritePin(LDO_OP_SWITCH_PORT, LDO_OP_SWITCH_PIN, GPIO_PIN_RESET)

extern ADC_HandleTypeDef        AdcHandle;

#define PWM_PERIOD_MOTOR				2400

#define TIMx_CHANNEL_GPIO_PORT()       __HAL_RCC_GPIOA_CLK_ENABLE()


#define MOTOR_F_GPIO_PORT        		GPIOA
#define MOTOR_F_GPIO_PIN         		GPIO_PIN_2

#define MOTOR_B_GPIO_PORT        		GPIOA
#define MOTOR_B_GPIO_PIN         		GPIO_PIN_3


#define LED2W_GPIO_CLK_ENALBE()    __HAL_RCC_GPIOB_CLK_ENABLE()
#define LED2W_GPIO_PORT					GPIOB
#define LED2W_GPIO_PIN					GPIO_PIN_3

#define OPA_GPIO_CLK_ENALBE()			__HAL_RCC_GPIOA_CLK_ENABLE()
#define OPA_GPIO_PORT					GPIOA
#define OPA_O_GPIO_PIN					GPIO_PIN_5
#define OPA_N_GPIO_PIN					GPIO_PIN_6
#define OPA_P_GPIO_PIN					GPIO_PIN_7

#define LDO_OP_SWITCH_GPIO_CLK_ENABLE()	__HAL_RCC_GPIOB_CLK_ENABLE()
#define LDO_OP_SWITCH_PORT				GPIOB
#define LDO_OP_SWITCH_PIN				GPIO_PIN_12

#define BATV_DET_GPIO_CLK_ENABLE()		__HAL_RCC_GPIOB_CLK_ENABLE()
#define BATV_GPIO_PORT					GPIOB
#define BATV_GPIO_PIN					GPIO_PIN_0

#define VNTC_DET_GPIO_CLK_ENABLE()		__HAL_RCC_GPIOA_CLK_ENABLE()
#define VNTC_DET_GPIO_PORT				GPIOA
#define VNTC_DET_GPIO_PIN				GPIO_PIN_1

void op_init();

void APP_AdcConfig();

void APP_TimConfig(void);

void pwm_init();

void set_motor_pwm_duty(int16_t duty_f, int16_t duty_b);

void set_LED2W_duty(int16_t duty);

void motor_beep_start(int32_t pwm_period, int16_t duty);

void motor_beep_stop();

void prepare_low_power_mode_mc();

void resume_from_low_power_mode_mc();

#endif
